package com.community.consumer.mapper;

import com.community.common.entity.*;
import com.community.consumer.entity.resp.GroupGoodResponse;
import com.community.consumer.entity.resp.GroupGoodSkuResoponse;
import com.community.consumer.entity.resp.GroupRecordListResponse;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ConsumerMapper {

    /**
     * 查找拼团的商品
     * @return
     */
    List<GroupGoodResponse> findGroupGoodList();

    /**
     * 查找所有可拼团的商品sku
     * @return
     */
    List<GroupGoodSkuResoponse> findGroupSkuList();

    /**
     * 添加订单详情
     * @param orderMore
     * @return
     */
    int addOrderMore(OrderMore orderMore);

    /**
     * 添加订单
     * @param order
     * @return
     */
    int addOrder(Order order);

    /**
     * 查询订单总价
     * @param orderNum
     * @return
     */
    Double findOrderMorePrice(@Param("orderNum") String orderNum);

    /**
     * 保存订单流水
     * @param orderSerial
     */
    void saveOrderSerial(OrderSerial orderSerial);

    /**
     * 修改订单状态
     * @param order
     */
    void updateOrderSuccess(Order order);

    /**
     * 查订单
     * @param orderNum
     * @return
     */
    Order findOrder(@Param("orderNum") String orderNum);

    /**
     * 修改订单流水
     * @param outTradeNo
     * @param i
     */
    void updaetOrderSerial(@Param("outTradeNo") String outTradeNo, @Param("i") int i);

    /**
     * 查找订单流水
     * @param outTradeNo
     * @return
     */
    OrderSerial findOrderSerial(@Param("outTradeNo") String outTradeNo);

    /**
     * 查找订单记录数
     * @param groupId
     * @return
     */
    int findGroupRecordCount(@Param("groupId") Integer groupId);

    /**
     * 添加拼团记录
     * @param groupRecord
     */
    int addOrderRecord(GroupRecord groupRecord);

    /**
     * 查找拼团状态
     * @param groupId
     * @return
     */
    int findGroupGood(@Param("groupId") Integer groupId);

    /**
     * 查找是否创建过此商品的订单
     * @param order
     * @return
     */
    int findGroupOrderSameUser(Order order);

    /**
     * 修改拼团记录状态
     * @param order
     */
    int updateGroupRecordStatus(Order order);

    /**
     * 查找拼团记录
     * @param groupId
     * @return
     */
    List<GroupRecordListResponse> findGroupRecord(@Param("groupId") String groupId);

    /**
     * 查找用户订单
     * @param id
     * @param groupId
     * @return
     */
    Order findUserOrder(@Param("id") Integer id, @Param("groupId") Integer groupId, @Param("flag") Integer flag);

    /**
     * 查找是否参加过此活动
     * @param id
     * @param groupId
     * @return
     */
    GroupRecord findIsJoinGroup(@Param("id") Integer id, @Param("groupId") String groupId);

    /**
     * 查找拼团商品
     * @param groupId
     * @return
     */
    GroupGoodResponse findGroupGoodOne(@Param("groupId") String groupId);

    /**
     * 需要修改的数据
     * @param orderNum
     * @return
     */
    GroupGoodSku findGroupSkuToUpdate(@Param("orderNum") String orderNum);

    /**
     * 修改数量
     * @param groupGoodSku
     */
    void updateGroupSkuNum(GroupGoodSku groupGoodSku);

    /**
     * 查找此拼团有多少成功的拼团记录
     * @param groupId
     * @return
     */
    int findJoinGroupSuccessNumber(@Param("groupId") Integer groupId);

    /**
     * 拼团结束
     * @param groupId
     */
    void updateGroupGoodStatus(@Param("groupId") Integer groupId);
}
